package com.star.system.controller;

import com.star.common.vo.DictVO;
import com.star.security.annotations.Authorize;
import com.star.system.dto.DictSaveDTO;
import com.star.system.dto.DictUpdateDTO;
import com.star.system.dto.DictUpdateTypeDTO;
import com.star.system.service.DictService;
import com.star.system.vo.DictData;
import com.star.system.vo.DictType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 字典
 *
 * @author yangzj
 */
@RestController
@RequestMapping("/dict")
public class DictController {
    @Autowired
    private DictService dictService;

    /**
     * 保存
     *
     * @param dto dto
     */
    @Authorize("dict:all")
    @PostMapping
    public void save(@Validated @RequestBody DictSaveDTO dto) {
        dictService.save(dto);
    }

    /**
     * 更新
     *
     * @param dto dto
     */
    @Authorize("dict:all")
    @PutMapping
    public void update(@Validated @RequestBody DictUpdateDTO dto) {
        dictService.update(dto);
    }

    /**
     * 更新类型
     *
     * @param dto dto
     */
    @Authorize("dict:all")
    @PutMapping("/type")
    public void updateType(@Validated @RequestBody DictUpdateTypeDTO dto) {
        dictService.updateType(dto);
    }

    /**
     * 根据id删除字典数据
     *
     * @param ids id
     */
    @Authorize("dict:all")
    @DeleteMapping
    public void deleteByIds(@RequestBody List<Long> ids){
        dictService.deleteByIds(ids);
    }

    /**
     * 根据类型编码删除
     *
     * @param typeCode 类型编码
     */
    @Authorize("dict:all")
    @DeleteMapping("/type/{typeCode}")
    public void deleteByType(@PathVariable String typeCode){
        dictService.deleteByType(typeCode);
    }

    /**
     * 类型列表
     *
     * @return {@link List}<{@link DictType}>
     */
    @Authorize("dict:all")
    @GetMapping("/list-type")
    public List<DictType> listType(){
        return dictService.listType();
    }

    /**
     * 数据列表
     *
     * @param typeCode 类型代码
     * @return {@link List}<{@link DictData}>
     */
    @GetMapping("/list-data/{typeCode}")
    public List<DictData> listData(@PathVariable String typeCode){
        return dictService.listData(typeCode);
    }

    /**
     * 所有字典（全局获取一次）
     *
     * @return {@link List}<{@link DictVO}>
     */
    @GetMapping("/list-all")
    public List<DictVO> listAll(){
        return dictService.listAll();
    }
}
